/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package almacen.bean;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 *
 * @author Antonio
 */
@Entity
@Table(name = "clientes", catalog = "bd_almacen", schema = "public")
@NamedQueries({
    @NamedQuery(name = "Clientes.findAll", query = "SELECT c FROM Clientes c"),
    @NamedQuery(name = "Clientes.findByCliCodigo", query = "SELECT c FROM Clientes c WHERE c.cliCodigo = :cliCodigo"),
    @NamedQuery(name = "Clientes.findByCliDescripcion", query = "SELECT c FROM Clientes c WHERE c.cliDescripcion = :cliDescripcion"),
    @NamedQuery(name = "Clientes.findByCliRuc", query = "SELECT c FROM Clientes c WHERE c.cliRuc = :cliRuc"),
    @NamedQuery(name = "Clientes.findByCliTelefono", query = "SELECT c FROM Clientes c WHERE c.cliTelefono = :cliTelefono"),
    @NamedQuery(name = "Clientes.findByCliSector", query = "SELECT c FROM Clientes c WHERE c.cliSector = :cliSector"),
    @NamedQuery(name = "Clientes.findByCliObs", query = "SELECT c FROM Clientes c WHERE c.cliObs = :cliObs"),
    @NamedQuery(name = "Clientes.findByCliFechaNacimiento", query = "SELECT c FROM Clientes c WHERE c.cliFechaNacimiento = :cliFechaNacimiento"),
    @NamedQuery(name = "Clientes.findByCliProfesion", query = "SELECT c FROM Clientes c WHERE c.cliProfesion = :cliProfesion"),
    @NamedQuery(name = "Clientes.findByCliEmpresa", query = "SELECT c FROM Clientes c WHERE c.cliEmpresa = :cliEmpresa"),
    @NamedQuery(name = "Clientes.findByCliEmpresaTelefono", query = "SELECT c FROM Clientes c WHERE c.cliEmpresaTelefono = :cliEmpresaTelefono"),
    @NamedQuery(name = "Clientes.findByCliTipo", query = "SELECT c FROM Clientes c WHERE c.cliTipo = :cliTipo"),
    @NamedQuery(name = "Clientes.findByCliReferencia", query = "SELECT c FROM Clientes c WHERE c.cliReferencia = :cliReferencia"),
    @NamedQuery(name = "Clientes.findByCliReferenciaTelefono", query = "SELECT c FROM Clientes c WHERE c.cliReferenciaTelefono = :cliReferenciaTelefono"),
    @NamedQuery(name = "Clientes.findByCliEmail", query = "SELECT c FROM Clientes c WHERE c.cliEmail = :cliEmail"),
    @NamedQuery(name = "Clientes.findByCliDesde", query = "SELECT c FROM Clientes c WHERE c.cliDesde = :cliDesde")})
public class Clientes implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "cli_codigo")
    @GeneratedValue(strategy= GenerationType.SEQUENCE)
    private Integer cliCodigo;
    @Column(name = "cli_descripcion")
    private String cliDescripcion;
    @Column(name = "cli_ruc")
    private String cliRuc;
    @Column(name = "cli_telefono")
    private String cliTelefono;
    
    @JoinColumn(name = "cli_sector", referencedColumnName="sec_codigo")
    @ManyToOne
    private Sector cliSector;
    
    @Column(name = "cli_obs")
    private String cliObs;
    @Column(name = "cli_fecha_nacimiento")
    @Temporal(TemporalType.DATE)
    private Date cliFechaNacimiento;
    @Column(name = "cli_profesion")
    private String cliProfesion;
    @Column(name = "cli_empresa")
    private String cliEmpresa;
    @Column(name = "cli_empresa_telefono")
    private Character cliEmpresaTelefono;
    @Column(name = "cli_tipo")
    private Character cliTipo;
    @Column(name = "cli_referencia")
    private String cliReferencia;
    @Column(name = "cli_referencia_telefono")
    private String cliReferenciaTelefono;
    @Column(name = "cli_email")
    private String cliEmail;
    @Column(name = "cli_desde")
    @Temporal(TemporalType.DATE)
    private Date cliDesde;
    @OneToMany(mappedBy = "dirCliente")
    private List<ClientesDireccion> clientesDireccionList;

    public Clientes() {
    }

    public Clientes(Integer cliCodigo) {
        this.cliCodigo = cliCodigo;
    }

    public Integer getCliCodigo() {
        return cliCodigo;
    }

    public void setCliCodigo(Integer cliCodigo) {
        Integer oldCliCodigo = this.cliCodigo;
        this.cliCodigo = cliCodigo;
        changeSupport.firePropertyChange("cliCodigo", oldCliCodigo, cliCodigo);
    }

    public String getCliDescripcion() {
        return cliDescripcion;
    }

    public void setCliDescripcion(String cliDescripcion) {
        String oldCliDescripcion = this.cliDescripcion;
        this.cliDescripcion = cliDescripcion;
        changeSupport.firePropertyChange("cliDescripcion", oldCliDescripcion, cliDescripcion);
    }

    public String getCliRuc() {
        return cliRuc;
    }

    public void setCliRuc(String cliRuc) {
        String oldCliRuc = this.cliRuc;
        this.cliRuc = cliRuc;
        changeSupport.firePropertyChange("cliRuc", oldCliRuc, cliRuc);
    }

    public String getCliTelefono() {
        return cliTelefono;
    }

    public void setCliTelefono(String cliTelefono) {
        String oldCliTelefono = this.cliTelefono;
        this.cliTelefono = cliTelefono;
        changeSupport.firePropertyChange("cliTelefono", oldCliTelefono, cliTelefono);
    }

    public Sector getCliSector() {
        return cliSector;
    }

    public void setCliSector(Sector cliSector) {
        Sector oldCliSector = this.cliSector;
        this.cliSector = cliSector;
        changeSupport.firePropertyChange("cliSector", oldCliSector, cliSector);
    }

    public String getCliObs() {
        return cliObs;
    }

    public void setCliObs(String cliObs) {
        String oldCliObs = this.cliObs;
        this.cliObs = cliObs;
        changeSupport.firePropertyChange("cliObs", oldCliObs, cliObs);
    }

    public Date getCliFechaNacimiento() {
        return cliFechaNacimiento;
    }

    public void setCliFechaNacimiento(Date cliFechaNacimiento) {
        Date oldCliFechaNacimiento = this.cliFechaNacimiento;
        this.cliFechaNacimiento = cliFechaNacimiento;
        changeSupport.firePropertyChange("cliFechaNacimiento", oldCliFechaNacimiento, cliFechaNacimiento);
    }

    public String getCliProfesion() {
        return cliProfesion;
    }

    public void setCliProfesion(String cliProfesion) {
        String oldCliProfesion = this.cliProfesion;
        this.cliProfesion = cliProfesion;
        changeSupport.firePropertyChange("cliProfesion", oldCliProfesion, cliProfesion);
    }

    public String getCliEmpresa() {
        return cliEmpresa;
    }

    public void setCliEmpresa(String cliEmpresa) {
        String oldCliEmpresa = this.cliEmpresa;
        this.cliEmpresa = cliEmpresa;
        changeSupport.firePropertyChange("cliEmpresa", oldCliEmpresa, cliEmpresa);
    }

    public Character getCliEmpresaTelefono() {
        return cliEmpresaTelefono;
    }

    public void setCliEmpresaTelefono(Character cliEmpresaTelefono) {
        Character oldCliEmpresaTelefono = this.cliEmpresaTelefono;
        this.cliEmpresaTelefono = cliEmpresaTelefono;
        changeSupport.firePropertyChange("cliEmpresaTelefono", oldCliEmpresaTelefono, cliEmpresaTelefono);
    }

    public Character getCliTipo() {
        return cliTipo;
    }

    public void setCliTipo(Character cliTipo) {
        Character oldCliTipo = this.cliTipo;
        this.cliTipo = cliTipo;
        changeSupport.firePropertyChange("cliTipo", oldCliTipo, cliTipo);
    }

    public String getCliReferencia() {
        return cliReferencia;
    }

    public void setCliReferencia(String cliReferencia) {
        String oldCliReferencia = this.cliReferencia;
        this.cliReferencia = cliReferencia;
        changeSupport.firePropertyChange("cliReferencia", oldCliReferencia, cliReferencia);
    }

    public String getCliReferenciaTelefono() {
        return cliReferenciaTelefono;
    }

    public void setCliReferenciaTelefono(String cliReferenciaTelefono) {
        String oldCliReferenciaTelefono = this.cliReferenciaTelefono;
        this.cliReferenciaTelefono = cliReferenciaTelefono;
        changeSupport.firePropertyChange("cliReferenciaTelefono", oldCliReferenciaTelefono, cliReferenciaTelefono);
    }

    public String getCliEmail() {
        return cliEmail;
    }

    public void setCliEmail(String cliEmail) {
        String oldCliEmail = this.cliEmail;
        this.cliEmail = cliEmail;
        changeSupport.firePropertyChange("cliEmail", oldCliEmail, cliEmail);
    }

    public Date getCliDesde() {
        return cliDesde;
    }

    public void setCliDesde(Date cliDesde) {
        Date oldCliDesde = this.cliDesde;
        this.cliDesde = cliDesde;
        changeSupport.firePropertyChange("cliDesde", oldCliDesde, cliDesde);
    }

    public List<ClientesDireccion> getClientesDireccionList() {
        return clientesDireccionList;
    }

    public void setClientesDireccionList(List<ClientesDireccion> clientesDireccionList) {
        this.clientesDireccionList = clientesDireccionList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (cliCodigo != null ? cliCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Clientes)) {
            return false;
        }
        Clientes other = (Clientes) object;
        if ((this.cliCodigo == null && other.cliCodigo != null) || (this.cliCodigo != null && !this.cliCodigo.equals(other.cliCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "almacen.view.Clientes[ cliCodigo=" + cliCodigo + " ]";
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    
}
